1. Field of the Invention
The present invention is directed to computer systems. More particularly, it is directed to graphical image processing including the generation of shadows and reflections.
2. Description of the Related Art
Graphics applications may render simple effects, such as shadows and reflections, that do not lend to the realism of the image. For example, a drop shadow is a visual effect consisting of drawing what appears to be a shadow of an object often giving the impression that the object is raised above the objects behind it. Rendering shadows using point light sources generally results in hard shadows. Hard shadows generally have a distinct edge between deep shade (e.g., the umbra) and no shade. A soft shadow, such as one rendered using an area light source, generally has a soft edge or penumbra, rather than a hard edge. Soft shadow generation in graphic applications generally involves determining the amount of light, and conversely the amount of shadow, that strikes particular points to be shaded. Rendering realistic shadows may improve the overall realism of an image, such as by providing additional spatial indicators about the geometry in the rendered image.
Additionally, soft shadows cast by area light sources and glossy reflections are not uniformly clear. Traditionally, however, shadows in computer generated scenes are generated using techniques, such as using drop shadows and/or point light sources that do not result in realistic appearing shadows. Additionally, blurry shadows are generally generated using a uniform blur or filter algorithm over the rendered shadow. Similarly reflections are traditionally generated using uniform image filters and convolutions function that may not result realistic looking reflections. Techniques to create more realistic drop shadow and/or reflection effects are traditionally very compute intensive. For instance, ray-tracing or ray-casting has traditionally been used to explicitly determine a spatially varying integral. However, ray-tracing can be very CPU intensive and therefore expensive, especially when implemented in software.